"""
题目：在二叉树中查找值为 x 的节点，返回该节点（若有多个，返回第一个遇到的）。
"""


class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right


def find_node(root, x):
    """在二叉树中查找值为x的节点（前序遍历方式）"""
    if not root:  # 空节点，返回None
        return None

    # 当前节点值等于x，返回该节点
    if root.val == x:
        return root

    # 先在左子树中查找
    left_result = find_node(root.left, x)
    if left_result:  # 左子树找到，返回结果
        return left_result

    # 左子树没找到，在右子树中查找
    right_result = find_node(root.right, x)
    return right_result  # 返回右子树的查找结果（可能为None）


# 辅助函数：创建二叉树（复用）
def create_binary_tree(arr):
    if not arr:
        return None
    root = TreeNode(arr[0])
    queue = [root]
    index = 1
    while queue and index < len(arr):
        current = queue.pop(0)
        if arr[index] is not None:
            current.left = TreeNode(arr[index])
            queue.append(current.left)
        index += 1
        if index < len(arr) and arr[index] is not None:
            current.right = TreeNode(arr[index])
            queue.append(current.right)
        index += 1
    return root


# 测试
root = create_binary_tree([1, 2, 3, 4, 5, 6, 7])
node = find_node(root, 5)
print(node.val if node else "Not found")  # 输出: 5

node = find_node(root, 9)
print(node.val if node else "Not found")  # 输出: Not found
